package impl

import (
	"go-caipu/pkg/services/admin/sysapi"
	"strings"
)

func getModuleFunc(apiList []sysapi.SysApi, path string, mothod string) (string, string) {
	// URl 地址取?之前的部分
	if strings.Contains(path, "?") {
		path = path[:strings.Index(path, "?")]
	}
	if strings.HasSuffix(path, "/plugin/") {
		return "插件", "插件接口"
	}
	//先尝试精确匹配
	for _, api := range apiList {
		if api.Path == path && api.Action == mothod {
			return api.CategoryName, api.Title
		}
	}
	//再尝试模糊匹配
	for _, api := range apiList {
		if calculatePathMatchScore(api.Path, path) > -1 && api.Action == mothod {
			return api.CategoryName, api.Title
		}
	}
	return "未定义", "未定义"
}

// 计算路径匹配度
func calculatePathMatchScore(pattern, path string) int {
	patternParts := strings.Split(pattern, "/")
	pathParts := strings.Split(path, "/")
	//todo: 1、支持匹配*url不定路由
	// 检查通配符 *
	wildcardIndex := -1
	for i, part := range patternParts {
		if part == "*" {
			wildcardIndex = i
			break
		}
	}

	// 如果存在通配符，只比较通配符之前的部分
	if wildcardIndex != -1 {
		if len(pathParts) < wildcardIndex {
			return -1 // 路径长度不足，不匹配
		}
		// 比较通配符之前的部分
		for i := 0; i < wildcardIndex; i++ {
			if patternParts[i] != pathParts[i] {
				return -1
			}
		}
		return 1 // 通配符匹配成功，得分为1
	}

	//todo: 2、支持匹配/:code 固定路由
	if len(patternParts) != len(pathParts) {
		return -1 // 长度不同，完全不匹配
	}
	score := 0
	for i := 0; i < len(patternParts); i++ {
		if patternParts[i] == pathParts[i] {
			score += 2 // 精确匹配得分更高
		} else if strings.HasPrefix(patternParts[i], ":") {
			score += 1 // 参数匹配得分较低
		} else {
			return -1 // 不匹配
		}
	}
	return score
}
